/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package screenmaster;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Region;
import javafx.stage.Stage;
import screenmaster.util.OSManager;
/**
*
* @author cybergnome
*/
public class ScreenMaster extends Application {
private static ScreenMaster instance = null;
public static ScreenMaster getInstance(){return instance;}
private Stage mainStage = null;
private ImageView imgView = null;
private BorderPane imgParent = null;
public Stage getMainStage(){
return mainStage;
}
public ImageView getDisplayImageView(){
return imgView;
}
public Region getDisplayImageViewContainer(){
return imgParent;
}
private final Properties config = new Properties();
private Path configFile = null;
public OSManager getOSManager(){
return OSManager.getInstance("ScreenMaster");
}
@Override public void init(){
instance = this;
configFile = Paths.get(getOSManager().getProgramDirectory().toString(),"config.properties");
if(Files.exists(configFile) == false){
try {
Files.createDirectories(getOSManager().getProgramDirectory());
Files.createFile(configFile);
} catch (IOException ex) {
getOSManager().getLogger(this).log(Level.WARNING, "Unable to create program directory", ex);
configFile = null;
}
} else {
try {
config.load(new FileReader(configFile.toFile()));
} catch (IOException ex) {
getOSManager().getLogger(this).log(Level.SEVERE, null, ex);
}
}
}
public Properties getConfig(){
return config;
}
@Override public void stop(){
if(configFile != null){
try {
config.store(new FileWriter(configFile.toFile()),"Screen Master data");
} catch (IOException ex) {
getOSManager().getLogger(this).log(Level.SEVERE, null, ex);
}
}
}
@Override
public void start(Stage stage) throws Exception {
mainStage = stage;
stage.setTitle("Control Window");
Parent displayRoot = createDisplayWindow();
Parent mainRoot = FXMLLoader.load(getClass().getResource("MasterWindow.fxml"));
Scene mainScene = new Scene(mainRoot);
Scene displayScene = new Scene(displayRoot);
stage.setScene(mainScene);
final Stage secondStage = new Stage();
secondStage.setTitle("Display Window");
secondStage.setScene(displayScene);
secondStage.setX(0);
secondStage.show();
stage.show();
stage.setOnCloseRequest((EventHandler)(Event e)-> Platform.exit());
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
private Parent createDisplayWindow() {
AnchorPane p = new AnchorPane();
p.setPrefSize(1024, 768);
BorderPane imgParent = new BorderPane();
p.getChildren().add(imgParent);
AnchorPane.setBottomAnchor(imgParent, 0d);
AnchorPane.setTopAnchor(imgParent, 0d);
AnchorPane.setLeftAnchor(imgParent, 0d);
AnchorPane.setRightAnchor(imgParent, 0d);
ImageView imgView = new ImageView();
imgView.setPickOnBounds(true);
imgView.setPreserveRatio(true);
imgParent.setCenter(imgView);
this.imgView = imgView;
this.imgParent = imgParent;
return p;
}
}